import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;

import java.sql.SQLException;

public class DruidDemo {
    public static void main(String[] args) {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); // 使用最新版本的MySQL驱动类名
        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/jdbc?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        dataSource.setInitialSize(5); // 初始化连接池的连接数量
        dataSource.setMaxActive(10); // 最大连接数
        dataSource.setMaxIdle(5); // 最大空闲连接数
        dataSource.setMinIdle(1); // 最小空闲连接数
        dataSource.setMaxWait(5000); // 获取连接的最大等待时间
        dataSource.setValidationQuery("SELECT 1"); // 连接是否可用的检测sql
        dataSource.setTestOnBorrow(true); // 在获取连接的时候检测
        dataSource.setTestOnReturn(true); // 在归还连接的时候检测
        dataSource.setTestWhileIdle(true); // 在空闲时检测连接
        dataSource.setTimeBetweenEvictionRunsMillis(3000); // 检测连接间隔时间
        dataSource.setMinEvictableIdleTimeMillis(60000); // 连接空闲的最小时间
        dataSource.setPoolPreparedStatements(true); // 开启预编译
        dataSource.setMaxOpenPreparedStatements(20); // 最大预编译sql数量
        try {
            dataSource.setFilters("stat"); // 监控
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        dataSource.setLogAbandoned(true); // 开启监控
        dataSource.setRemoveAbandoned(true); // 开启监控
        dataSource.setRemoveAbandonedTimeout(60); // 超时时间

        try {
            DruidPooledConnection connection = dataSource.getConnection();
            if (connection != null) {
                System.out.println("连接成功");
                connection.close(); // 使用完后关闭连接
            } else {
                System.out.println("连接失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("获取连接时发生错误：" + e.getMessage());
        }

    }
}